package com.vanysoft.framework.redis;

import com.vanysoft.business.sys.entity.UserInfo;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

/**
 * 类名称：RedisService
 * 类描述：用户的redis操作类
 * 创建人：SharpClaw_x
 * 创建时间：2017年5月15日 下午2:47:03
 * 修改人：SharpClaw_x
 * 修改时间：2017年5月15日 下午2:47:03
 * 版本信息：@version 1.0
 * Copyright (c) 2017SharpClaw-版权所有
 * 修改备注：
 */
@Service
public class RedisService {

    public final static Integer REDIS_TIMEOUT = 30;
    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * Function Name               initUserInfoToCache
     *
     * @param userInfo
     * @return
     * @description 初始化用户信息到缓存中去
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月5日 下午5:16:16           SharpClaw_x                     Initial
     * *********************************************************************
     */
    public String initUserInfoToCache(UserInfo userInfo) {
        String token = UUID.randomUUID().toString();
        this.setUserInfo(token, userInfo);
        return token;
    }

    /**
     * Function Name               setUserInfo
     *
     * @param token
     * @param userInfo
     * @description 保存用户信息到redis缓存中去
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年5月15日 下午2:55:15           SharpClaw_x                     Initial
     * *********************************************************************
     */
    public void setUserInfo(String token, UserInfo userInfo) {
        ValueOperations<String, Object> vo = redisTemplate.opsForValue();
        vo.set(token, userInfo, REDIS_TIMEOUT, TimeUnit.MINUTES);
    }

    /**
     * Function Name               getUserInfo
     *
     * @param token
     * @return
     * @description 从redis缓存中获取用户的基础信息
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年5月15日 下午2:55:33           SharpClaw_x                     Initial
     * *********************************************************************
     */
    public UserInfo getUserInfo(String token) {
        ValueOperations<String, Object> vo = redisTemplate.opsForValue();
        Object userObj = vo.get(token);
        vo.set(token, userObj, REDIS_TIMEOUT, TimeUnit.MINUTES);
        if (null != userObj) {
            if (userObj instanceof UserInfo) {
                return (UserInfo) userObj;
            }
        }
        return null;
    }

    /**
     * Function Name               deleteRedis
     *
     * @param token
     * @description 从redis缓存汇总清除
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年7月4日 下午4:57:06           SharpClaw_x                     Initial
     * *********************************************************************
     */
    public void deleteRedis(String token) {
        redisTemplate.delete(token);
    }

    public void set(String key, Object value) {
        ValueOperations<String, Object> vo = redisTemplate.opsForValue();
        vo.set(key, value);
    }

    public Object get(String key) {
        ValueOperations<String, Object> vo = redisTemplate.opsForValue();
        return vo.get(key);
    }

    public void delete(String key) {
        redisTemplate.delete(key);
    }
}
